home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / tex / texsrc.arc / TEX5.C < prev    next >
C/C++ Source or Header  |  1988-09-14  |  64KB  |  2,090 lines

  1. overlay "tex5"
  2. #define EXTERN extern
  3. #include "texd.h"
  4.  
  5. zappendtovlis ( b ) 
  6. halfword b ; 
  7. {r_appendtovlis 
  8.   scaled d ; 
  9.   halfword p ; 
  10.   if ( curlist .auxfield > - 65536000 ) 
  11.   {
  12.     d = mem [(long) eqtb [ 3527 ] .hh .v.RH + 1 ] .cint - curlist .auxfield - mem [(long) 
  13.     b + 3 ] .cint ; 
  14.     if ( d < eqtb [ 5703 ] .cint ) 
  15.     p = newparamglue ( 0 ) ; 
  16.     else { 
  17.       p = newskipparam ( 1 ) ; 
  18.       mem [(long) tempptr + 1 ] .cint = d ; 
  19.     } 
  20.     mem [(long) curlist .tailfield ] .hh .v.RH = p ; 
  21.     curlist .tailfield = p ; 
  22.   } 
  23.   mem [(long) curlist .tailfield ] .hh .v.RH = b ; 
  24.   curlist .tailfield = b ; 
  25.   curlist .auxfield = mem [(long) b + 2 ] .cint ; 
  26. halfword newnoad () { register halfword Result; r_newnoad 
  27.   long p ; 
  28.   p = getnode ( 4 ) ; 
  29.   mem [  p ] .hh.b0 = 16 ; 
  30.   mem [  p ] .hh.b1 = 0 ; 
  31.   mem [  p + 1 ] .hh = emptyfield ; 
  32.   mem [  p + 3 ] .hh = emptyfield ; 
  33.   mem [  p + 2 ] .hh = emptyfield ; 
  34.   Result = p ; 
  35.   return(Result) ; 
  36. halfword znewstyle ( s ) 
  37. smallnumber s ; 
  38. {register halfword Result; r_newstyle 
  39.  long p ; 
  40.   p = getnode ( 3 ) ; 
  41.   mem [  p ] .hh.b0 = 14 ; 
  42.   mem [  p ] .hh.b1 = s ; 
  43.   mem [  p + 1 ] .cint = 0 ; 
  44.   mem [  p + 2 ] .cint = 0 ; 
  45.   Result = p ; 
  46.   return(Result) ; 
  47. halfword newchoice () { register halfword Result; r_newchoice 
  48.   long p ; 
  49.   p = getnode ( 3 ) ; 
  50.   mem [  p ] .hh.b0 = 15 ; 
  51.   mem [  p ] .hh.b1 = 0 ; 
  52.   mem [  p + 1 ] .hh .v.LH = 0 ; 
  53.   mem [  p + 1 ] .hh .v.RH = 0 ; 
  54.   mem [  p + 2 ] .hh .v.LH = 0 ; 
  55.   mem [  p + 2 ] .hh .v.RH = 0 ; 
  56.   Result = p ; 
  57.   return(Result) ; 
  58. showinfo () { r_showinfo 
  59.   shownodelist ( mem [(long) tempptr ] .hh .v.LH ) ; 
  60. halfword zfractionrule ( t ) 
  61. scaled t ; 
  62. {register halfword Result; r_fractionrule 
  63.   halfword p ; 
  64.   p = newrule () ; 
  65.   mem [(long) p + 3 ] .cint = t ; 
  66.   mem [(long) p + 2 ] .cint = 0 ; 
  67.   Result = p ; 
  68.   return(Result) ; 
  69. halfword zoverbar ( b , k , t ) 
  70. halfword b ; 
  71. scaled k , t ; 
  72. {register halfword Result; r_overbar 
  73.   halfword p, q ; 
  74.   p = newkern ( k ) ; 
  75.   mem [(long) p ] .hh .v.RH = b ; 
  76.   q = fractionrule ( t ) ; 
  77.   mem [(long) q ] .hh .v.RH = p ; 
  78.   p = newkern ( t ) ; 
  79.   mem [(long) p ] .hh .v.RH = q ; 
  80.   Result = vpackage ( p , 0 , 1 , 1073741823 ) ; 
  81.   return(Result) ; 
  82. halfword zcharbox ( f , c ) 
  83. internalfont f ; 
  84. quarterword c ; 
  85. {register halfword Result; r_charbox 
  86.   fourquarters q ; 
  87.   eightbits hd ; 
  88.   halfword b, p ; 
  89.   q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
  90.   hd = q .b1 ; 
  91.   b = newnullbox () ; 
  92.   mem [(long) b + 1 ] .cint = fontinfo [ widthbase [ f ] + q .b0 ] .cint + fontinfo 
  93.   [ italicbase [ f ] + ( q .b2 ) / 4 ] .cint ; 
  94.   mem [(long) b + 3 ] .cint = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint ; 
  95.   mem [(long) b + 2 ] .cint = fontinfo [ depthbase [ f ] + ( hd ) % 16 ] .cint ; 
  96.   p = getavail () ; 
  97.   mem [(long) p ] .hh.b1 = c ; 
  98.   mem [(long) p ] .hh.b0 = f ; 
  99.   mem [(long) b + 5 ] .hh .v.RH = p ; 
  100.   Result = b ; 
  101.   return(Result) ; 
  102. zstackintobox ( b , f , c ) 
  103. halfword b ; 
  104. internalfont f ; 
  105. quarterword c ; 
  106. {r_stackintobox 
  107.   halfword p ; 
  108.   p = charbox ( f , c ) ; 
  109.   mem [(long) p ] .hh .v.RH = mem [(long) b + 5 ] .hh .v.RH ; 
  110.   mem [(long) b + 5 ] .hh .v.RH = p ; 
  111.   mem [(long) b + 3 ] .cint = mem [(long) p + 3 ] .cint ; 
  112. scaled zheightplusde ( f , c ) 
  113. internalfont f ; 
  114. quarterword c ; 
  115. {register scaled Result; r_heightplusde 
  116.   fourquarters q ; 
  117.   eightbits hd ; 
  118.   q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
  119.   hd = q .b1 ; 
  120.   Result = fontinfo [ heightbase [ f ] + ( hd ) / 16 ] .cint + fontinfo [ 
  121.   depthbase [ f ] + ( hd ) % 16 ] .cint ; 
  122.   return(Result) ; 
  123. halfword zvardelimiter ( d , s , v ) 
  124. halfword d ; 
  125. smallnumber s ; 
  126. scaled v ; 
  127. {/* 40 22 */ register halfword Result; r_vardelimiter 
  128.   halfword b ; 
  129.   internalfont f, g ; 
  130.   quarterword c, x, y ; 
  131.   integer m, n ; 
  132.   scaled u ; 
  133.   scaled w ; 
  134.   fourquarters q ; 
  135.   eightbits hd ; 
  136.   fourquarters r ; 
  137.   smallnumber z ; 
  138.   boolean largeattempt ; 
  139.   f = 0 ; 
  140.   w = 0 ; 
  141.   largeattempt = false ; 
  142.   z = mem [(long) d ] .qqqq .b0 ; 
  143.   x = mem [(long) d ] .qqqq .b1 ; 
  144.   while ( true ) { 
  145.     if ( ( z != 0 ) || ( x != 0 ) ) 
  146.     {
  147.       z = z + s + 16 ; 
  148.       do { z = z - 16 ; 
  149.     g = eqtb [ 4579 + z ] .hh .v.RH ; 
  150.     if ( g != 0 ) 
  151.     {
  152.       y = x ; 
  153.       lab22: if ( ( y >= fontbc [ g ] ) && ( y <= fontec [ g ] ) ) 
  154.       {
  155.         q = fontinfo [ charbase [ g ] + y ] .qqqq ; 
  156.         if ( ( q .b0 > 0 ) ) 
  157.         {
  158.           if ( ( ( q .b2 ) % 4 ) == 3 ) 
  159.           {
  160.         f = g ; 
  161.         c = y ; 
  162.         goto lab40 ; 
  163.           } 
  164.           hd = q .b1 ; 
  165.           u = fontinfo [ heightbase [ g ] + ( hd ) / 16 ] .cint + fontinfo 
  166.           [ depthbase [ g ] + ( hd ) % 16 ] .cint ; 
  167.           if ( u > w ) 
  168.           {
  169.         f = g ; 
  170.         c = y ; 
  171.         w = u ; 
  172.         if ( u >= v ) 
  173.         goto lab40 ; 
  174.           } 
  175.           if ( ( ( q .b2 ) % 4 ) == 2 ) 
  176.           {
  177.         y = q .b3 ; 
  178.         goto lab22 ; 
  179.           } 
  180.         } 
  181.       } 
  182.     } 
  183.       } while ( ! ( z < 16 ) ) ; 
  184.     } 
  185.     if ( largeattempt ) 
  186.     goto lab40 ; 
  187.     largeattempt = true ; 
  188.     z = mem [(long) d ] .qqqq .b2 ; 
  189.     x = mem [(long) d ] .qqqq .b3 ; 
  190.   } 
  191.   lab40: if ( f != 0 ) 
  192.   if ( ( ( q .b2 ) % 4 ) == 3 ) 
  193.   {
  194.     b = newnullbox () ; 
  195.     mem [(long) b ] .hh.b0 = 1 ; 
  196.     r = fontinfo [ extenbase [ f ] + q .b3 ] .qqqq ; 
  197.     c = r .b3 ; 
  198.     u = heightplusde ( f , c ) ; 
  199.     w = 0 ; 
  200.     q = fontinfo [ charbase [ f ] + c ] .qqqq ; 
  201.     mem [(long) b + 1 ] .cint = fontinfo [ widthbase [ f ] + q .b0 ] .cint + 
  202.     fontinfo [ italicbase [ f ] + ( q .b2 ) / 4 ] .cint ; 
  203.     c = r .b2 ; 
  204.     if ( c != 0 ) 
  205.     w = w + heightplusde ( f , c ) ; 
  206.     c = r .b1 ; 
  207.     if ( c != 0 ) 
  208.     w = w + heightplusde ( f , c ) ; 
  209.     c = r .b0 ; 
  210.     if ( c != 0 ) 
  211.     w = w + heightplusde ( f , c ) ; 
  212.     n = 0 ; 
  213.     if ( u > 0 ) 
  214.     while ( w < v ) { 
  215.       w = w + u ; 
  216.       incr ( n ) ; 
  217.       if ( r .b1 != 0 ) 
  218.       w = w + u ; 
  219.     } 
  220.     c = r .b2 ; 
  221.     if ( c != 0 ) 
  222.     stackintobox ( b , f , c ) ; 
  223.     c = r .b3 ; 
  224.     for ( m = 1 ; m <= n ; m ++ ) 
  225.     stackintobox ( b , f , c ) ; 
  226.     c = r .b1 ; 
  227.     if ( c != 0 ) 
  228.     {
  229.       stackintobox ( b , f , c ) ; 
  230.       c = r .b3 ; 
  231.       for ( m = 1 ; m <= n ; m ++ ) 
  232.       stackintobox ( b , f , c ) ; 
  233.     } 
  234.     c = r .b0 ; 
  235.     if ( c != 0 ) 
  236.     stackintobox ( b , f , c ) ; 
  237.     mem [(long) b + 2 ] .cint = w - mem [(long) b + 3 ] .cint ; 
  238.   } 
  239.   else b = charbox ( f , c ) ; 
  240.   else { 
  241.     b = newnullbox () ; 
  242.     mem [(long) b + 1 ] .cint = eqtb [ 5712 ] .cint ; 
  243.   } 
  244.   mem [(long) b + 4 ] .cint = half ( mem [(long) b + 3 ] .cint - mem [(long) b + 2 ] .cint ) - 
  245.   fontinfo [ 22 + parambase [ eqtb [ 4581 + s ] .hh .v.RH ] ] .cint ; 
  246.   Result = b ; 
  247.   return(Result) ; 
  248. halfword zrebox ( b , w ) 
  249. halfword b ; 
  250. scaled w ; 
  251. {register halfword Result; r_rebox 
  252.   halfword p ; 
  253.   internalfont f ; 
  254.   scaled v ; 
  255. fourquarters qi;
  256.   if ( ( mem [(long) b + 1 ] .cint != w ) && ( mem [(long) b + 5 ] .hh .v.RH != 0 ) ) 
  257.   {
  258.     if ( mem [(long) b ] .hh.b0 == 1 ) 
  259.     b = hpack ( b , 0 , 1 ) ; 
  260.     p = mem [(long) b + 5 ] .hh .v.RH ; 
  261.     if ( ( ( p >= himemmin ) ) && ( mem [(long) p ] .hh .v.RH == 0 ) ) 
  262.     {
  263.       f = mem [(long) p ] .hh.b0 ; 
  264. /*      v = fontinfo [ widthbase [ f ] + fontinfo [ charbase [ f ] + mem [(long) p ] 
  265.       .hh.b1 ] .qqqq .b0 ] .cint ; */
  266.   qi = fontinfo [ charbase [ f ] + mem [(long) p ]  .hh.b1 ] .qqqq;
  267.       v = fontinfo [ widthbase [ f ] +qi.b0 ] .cint ;
  268.       if ( v != mem [(long) b + 1 ] .cint ) 
  269.       mem [(long) p ] .hh .v.RH = newkern ( mem [(long) b + 1 ] .cint - v ) ; 
  270.     } 
  271.     freenode ( b , 7 ) ; 
  272.     b = newglue ( 12 ) ; 
  273.     mem [(long) b ] .hh .v.RH = p ; 
  274.     while ( mem [(long) p ] .hh .v.RH != 0 ) p = mem [(long) p ] .hh .v.RH ; 
  275.     mem [(long) p ] .hh .v.RH = newglue ( 12 ) ; 
  276.     Result = hpack ( b , w , 0 ) ; 
  277.   } 
  278.   else { 
  279.     mem [(long) b + 1 ] .cint = w ; 
  280.     Result = b ; 
  281.   } 
  282.   return(Result) ; 
  283. halfword zmathglue ( g , m ) 
  284. halfword